/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef NAS_SNAPSHOT_RESTORE_JOB_H
#define NAS_SNAPSHOT_RESTORE_JOB_H

#include "SnapshotCommon.h"

class SnapshotRestore : public SnapshotCommon {
public:
    SnapshotRestore() {}
    ~SnapshotRestore();
    EXTER_ATTACK int PrerequisiteJob() override;
    EXTER_ATTACK int GenerateSubJob() override;
    EXTER_ATTACK int ExecuteSubJob() override;
    EXTER_ATTACK int PostJob() override;

private:
    int WaitingSnapshotRestoreComplete();
    int ExecuteSnapshotRestore(std::string& dtreeInfo);
    int PrerequisiteJobInner();
    int GenerateSubJobInner();
    int QuerySnapshotRollBackStatus(const int& maxRetryTime, std::string& rollbackStatus, std::string& endTime);
    int ExecuteSubJobInner();
    int PostJobInner() const;
    int InitJobInfo();
    int CheckExistSnapshot();

private:
    std::shared_ptr<AppProtect::RestoreJob> m_jobInfoPtr {nullptr};
    std::string m_snapshotName;
    std::string m_snapshotId;
    time_t m_revertStartTime;
};

#endif